package vue;

import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

import metier.*;

/**
 * Classe de GUI d'une carte
 *
 * @author Thomas Folgueral
 * @author Julien Pernot
 * @author Guillaume Peyet
 * @author Guillaume Sainthillier
 */
public class VueCarte implements Observer {

    private final Carte c;

    public VueCarte(Carte c) {
        this.c = c;
        this.c.addObserver(this);
    }

    /**
     * Méthode appelée lors de la modification du modèle Carte
     * @param o l'objet Carte qui a déclenché la notification
     * @param arg l'objet Element à l'origine de la notification
     */
    @Override
    public void update(Observable o, Object arg) {
        //Element e = (Element)arg; // Element affecté par la modification
        this.afficherCarte();
    }
    
    /**
     * Affiche la carte sur la console
     */
    public void afficherCarte() {
        ArrayList<String> elts = new ArrayList();
        StringBuffer str = new StringBuffer();
        for (int y = 0; y < this.c.getLongueur(); y++) {
            for (int x = 0; x < this.c.getLargeur(); x++) {
                ArrayList<Element> elements = this.c.getElements(new Position(x, y));
                if (!elements.isEmpty()) {

                    elts.add("|"+ elements.get(0));
                    
                } else {
                    elts.add("| ");
                }
                str.append("+-");
            }
            elts.add("|");
            str.append("+\n");
            for (String s : elts) {
                str.append(s);
            }
            elts = new ArrayList();
            str.append("\n");
        }
        for (int x = 0; x < this.c.getLargeur(); x++) {
            str.append("+-");
        }
        str.append("+");

        System.out.println(str);
    }    
}
